/*****************************************************************************
文件：X-sky/hal/rtc.c
描述：通过定时器timer0产生1/10/100/1000ms定时调用，并记录系统启动后实时时钟。
作者：苦海渔生(loganx)
项目链接: https://gitee.com/loganxiang/X-sky
*****************************************************************************/
#include"../inc/hal.h"
#include"../inc/rtc.h"

unsigned long rtc;
unsigned int cycle_ms;

void (*timer1ms_isr)(void);
void (*timer10ms_isr)(void);
void (*timer100ms_isr)(void);
void (*timer1s_isr)(void);

//定时器空调用，用于初始化各周期调用子程序
void timer_idle_isr(void){
}

//rtc初始化，使用timer0，1ms周期
void rtc_init(void)
{
	AUXR |= 0x80;
	TMOD &= 0xF0;
	TL0 = 0x40;
	TH0 = 0xA2;
	TF0 = 0;
	TR0 = 1;

	cycle_ms = 0;
	timer1ms_isr = timer_idle_isr;
	timer10ms_isr = timer_idle_isr;
	timer100ms_isr = timer_idle_isr;
	timer1s_isr = timer_idle_isr;
}

void timer0_isr(void) __interrupt(1){
	rtc++;
    if(cycle_ms++ >= CYCLE_MAX)
		cycle_ms = 0;

	*timer1ms_isr();
	if(cycle_ms % 10 = 0)
		*timer10ms_isr();
	if(cycle_ms % 100 = 0)
		*timer100ms_isr();
	if(cycle_ms = 0)
		*timer1s_isr();
}